#!/usr/bin/env bash

# 具体的行为自定义,
# 通常是执行 `go vet` 或 `cargo clippy` 等规范性较验流程
make lint || exit 1

# 具体的行为自定义,
# 通常是执行自动化测试用例
make test || exit 1

# 连接到 TT 私有云系统,
# 执行多系统兼容性测试
tt_auto_test() {
    # 将在 TT 系统中创建的环境名称
    env="$(hostname)$(date +%s)$RANDOM"

    # 需要参与测试的系统列表;
    # 需要提前在 TT 中准备好基础镜像, 按需更改
    os_list="fire:centos-7.x:3.10.0,fire:centos-7.x:4.14,fire:centos-8.x:4.18"

    if [[ "Linux" = $(uname -s) ]]; then
        cp --reflink=auto -rp $(pwd) /tmp/${env} || exit 1
    else
        cp -rp $(pwd) /tmp/${env} || exit 1
    fi

    # 清理可能存在的无关文件
    cwd=$(pwd)
    cd /tmp/${env} || exit 1
    mv -f .git/hooks/* /tmp/ || exit 1
    git commit -m 'test' || exit 1
    git reset --hard HEAD || exit 1
    git clean -fdx || exit 1
    rm -rf .git || exit 1
    cd ${cwd} || exit 1

    tar -C /tmp -cpf /tmp/${env}.tar ${env} || exit 1
    rm -rf /tmp/${env} 2>/dev/null

    # 创建临时测试环境;
    # 生命周期 180 秒, 可根据项目实际情况按需更改
    tt env add ${env} -s ${os_list} -C 2 -M 2048 -l 180 || exit 1

    # 等待全部虚拟机启动完毕
    sleep 10

    # 将代码快照的 tar 包传送到测试环境中;
    # 推送超时时间 50 秒, 可根据代码包的大小及网络速度按需更改
    tt env push ${env} -f /tmp/${env}.tar -t 50 || exit 1

    # 在所有虚拟机中批量执行自动化测试;
    # 测试超时时间 60 秒, 可根据项目实际情况按需更改
    tt env run ${env} -c "tar -xpf /tmp/${env}.tar && make test -C ${env}" -t 60

    # 销毁测试环境, 释放资源;
    # 不手动销毁也可以, 到达设定的生命周期时, 会自动销毁
    tt env del ${env}
}

# 按需决定是否启用 TT 运程多系统测试
# 若本地测试能满足需求, 可注释掉此行
tt_auto_test

